package model
//
//import (
//	"encoding/json"
//	"fmt"
//	"github.com/garyburd/redigo/redis"
//)
//
////我们希望在服务器启动后，就初始化一个userdao实例，
////把他做成全局的变量，在需要和redis操作时直接使用即可
//var (
//	MyUserDao *UserDao
//)
//
//
////定义一个userDao 结构体
////完成对User结构体的各种操作
//
//type UserDao struct {
//	pool *redis.Pool
//}
//
////使用工厂模式，创建一个userdao实例
//func NewUserDao(pool *redis.Pool) (userDao *UserDao) {
//	userDao = &UserDao{
//		pool:  pool,
//	}
//	return
//}
//
////1.根据一个用户id，返回一个user实例+err
//func (this *UserDao) getUserById(conn redis.Conn, id int) (user *User, err error) {
//
//	//通过给定的id去redis内查询用户
//	res, err := redis.String(conn.Do("hget", "users", id))
//	if err != nil {
//		//cuowu!
//		if err == redis.ErrNil { //表示在users哈希中没有找到对应id
//			err = ERROR_USER_NOTEXISTS
//		}
//		return
//	}
//
//	user = &User{}
//	//这里我们需要把res反序列化成一个user实例
//	err = json.Unmarshal([]byte(res), &user)
//	if err != nil {
//		fmt.Println("json.Unmarshal([]byte(res), &user) err = ", err)
//		return
//	}
//	return
//
//}
//
////完成登录的校验Login
////1.login完成对用户身份的校验
////2.如果用户的id和pwd都正确，则返回一个user实例
////3.如果用户的id或者pwd有错误，则返回对应的错误信息
//func (this *UserDao) Login(userId int, userPwd string) (user *User, err error) {
//
//	//先从userdao的连接池子里面取出一根连接
//	conn := this.pool.Get()
//	defer conn.Close()
//	user, err = this.getUserById(conn, userId)
//	if err != nil {
//		return
//	}
//
//	//这时至少证明用户是获取到的，但是密码还不知道正确与否
//	if user.UserPwd != userPwd { //密码错误
//		err = ERROR_USER_PWD
//		return
//	}
//	return
//
//}
//
////注册
//func (this *UserDao) Register(user *User) (err error) {
//
//	//先从userdao的连接池子里面取出一根连接
//	conn := this.pool.Get()
//	defer conn.Close()
//	user, err = this.getUserById(conn, user.UserId)
//	if err != nil {
//		err = ERROR_USER_EXISTS
//		return
//	}
//
//	//这时，说明id 在redis还没有，则可以完成注册
//	data, err := json.Marshal(user) //序列化
//	if err != nil {
//		return
//	}
//
//	//入库
//	_, err = conn.Do("hset", "users", user.UserId, string(data))
//	if err != nil {
//		fmt.Println("保存注册用户错误 err = ", err)
//		return
//	}
//	return
//}
//
